[UPDATE] AWS Elemental MediaPackage v2でアクセスログがサポートされました!

[UPDATE] AWS Elemental MediaPackage v2でアクセスログがサポートされました!

MediaPackage v2でAccess loggingをサポートしました!CloudWatch Logsに加えて、Amazon S3やAmazon Data Firehoseにも送信が可能です。実際にアクセスログを有効化して確認してみました。
Clock Icon2024.11.28

はじめに

清水です。AWS Elemental MediaPackage v2でAccess Loggingサポートのアップデートがありました!2024/11/27時点でまだWhat's New at AWSへのポストは確認できませんが、MediaPackage v2 User GuideDocument historyで2024/11/15付けのアップデートを確認できます。

ta12
引用元: Document history for the MediaPackage User Guide - AWS Elemental MediaPackage

2023年5月にリリースされたMediaPackage v2、リリース時からフィーチャーされたlow-latency HLSサポートのほか、MediaLiveとのCMAF Ingest連携やそれを用いたCross-region failoverアーキテクチャ、そしてAV1コーデックなど、MediaPackage v1にはない機能が続々とサポートされてきました。しかしMediaPackage v2ではこれまでアクセスロギングがサポートされていなかったことから、v1からv2に移行したいと考えながらも足踏み状態になってしまった、というケースもあったのではないでしょうか。

リリースからおよそ1年半、やっとMediaPackage v2にもアクセスログがやってきてくれました!本エントリでは実際にMediaPackage v2でアクセスログを有効にして、その内容を確認してみたのでまとめてみたいと思います。

MediaPackage v2でアクセスログを有効化してみた

MediaPackage v2のアクセスログですが、Channel gropu単位で有効/無効を設定します。User Guideの以下ページを参考に、Channel gropuの作成時にアクセスログを有効化するかたちで設定してみました。

なお、現段階で設定したアクセスログの保存先を変更する、ということはできないようです。ログ保存先を変更する必要がある場合、いちどログ設定を削除して保存先を変更した新しいログの設定を行いましょう。

Channel groupsの作成とアクセスログの有効化

MediaPackageのマネジメントコンソール、Live v2のChannel groupsのページから(Create channel group)ボタンで進みます。Channel group nameと、必要に応じてDescriptionを入力しましょう。さて、従来はこのCreate channel groupの画面、Channel group nameとDescriptionの2つの設定項目しかありませんでしたが(例えばリリース時のマネジメントコンソール画面のようすはこちらのブログエントリから確認できます)、Access Loggingの項目が増えていますね。(マネジメントコンソールのデザインもCloudscapeを使ったものに変わっています。)

ta23

まずはEgress Access Logs(Origin endpoint側のアクセスログ)を有効化しましょう。(Add)ボタンを押下すると、「To Amazon CloudWatch Logs」、「To Amazon S3」、「To Amazon Data Firehose」と3つのサービスが現れます。

ta02

MediaPackage v1ではアクセスログの送信先はCloudWatch Logsのみでしたが、MediaPackage v2ではCloudWatch Logsに加えてS3やFirehoseへの送信も可能となっています。ただしマネジメントコンソールによると、MediaPackage v2ではCloudWatch Vended Logsを使用してアクセスログを出力しているとのことで、これに応じたCloudWatchの料金が発生する点に注意しましょう。(参考: CloudWatch Logsの機能「Vended Logs」について調べてみた | DevelopersIO

今回はアクセスログの出力先としてCloudWatch Logsを使用します。なおS3とFirehoseを選択した場合は、「Cross account」もしくは「In current account」を選択できるようになっています。

「To Amazon CloudWatch Logs」を選択すると、Destination log groupの項目が現れます。今回はデフォルトの値のまま進めました。(mediapackagev2-alphaalphaが気になるところではありますが。)

ta13

なお、Additional settingsの項目を展開すると以下のように設定項目が現れます。出力されるログの内容(フィールド)、出力フォーマットや区切り文字を指定できるようですね。今回はいずれもデフォルトのまま進めてみました。

ta14

Ingress Access Logs(ChannelのIngest endpoint側のアクセスログ)についても同様に「To Amazon CloudWatch Logs」を選択、デフォルトのDestination log groupを使用して設定しました。Additional settingsもデフォルトのままです。Field selectionの項目についてはEgressと項目数が異なるようですね。

ta15

Channel groupが作成できました。Loggingの項目を確認すると、Log deliveryにEGRESS_ACCESS_LOGSINGRESS_ACCESS_LOGSの2つの項目が並んでいます。Destinationの列はリンクになっており、クリックするとCloudWatch Logsのマネジメントコンソールに遷移します。

ta16

以上でアクセスログ自体の設定は完了です。続いてMediaPackageのChannelとOrigin endpointのリソース、MediaLiveのリソースなどを作成していきます。

ChannelとOrigin Endpointの作成

MediaPackageのChannel作成、Channel group詳細画面のChannelsの項目、(Create channel)ボタンから進みます。

Channel nameを適切に入力、Input typeとして今回はHLSを選択しました。Channel policyはDont' attach a policyで進めます。

ta03

続いて、Channel詳細画面のOrigin endpointsの項目から(Create endpont)ボタンを押下しOrigin endpointを作成します。Nameを適切に設定、Container typeはTSを今回は選択しました。その他の項目はでデフォルトで進め、Endpoint policyについては今回は検証目的ということでAttach a public policyを選択しました。Manifest definitionsではHLS manifestを追加、Manifest nameとChild manifest nameを適切に設定しています。

ta04

ta22

ta06

ta07

MediaLiveリソースの作成とライブストリームの開始

MediaPackageと連携するMediaLiveのリソースを作成します。以下ブログエントリと同様の手順での作成となるため詳細は割愛します。

MediaPackageのマネジメントコンソールデザインが変わっているため、MediaPackage ChannelのIngest endpoint確認箇所だけスクリーンショットを掲示しておきましょう。以下の箇所ですね。(新しいマネジメントコンソール、あくまで変わったのはデザインだけで、各設定項目の場所は変わっていないようですね。)

ta08

MediaLiveリソースを作成したらMediaLive ChannelをStartさせます。またStreaming Softwareから映像をMediaLive Inputに向けて打ち上げます。今回はOBS Studioを使用しました。

映像を打ち上げたあと、MedidaLive Cahnnelのマネジメントコンソール、Previw表示で映像に問題がないことを確認しておきます。

ta17

またMediaPackage v2のマネジメントコンソール、Origin endpoint詳細画面のManifest settingsの項目、(Preview)ボタンからEndpoint URLが指定されたhls.js demoページを開きます。

ta09

(ちょっとピンボケしてるなぁ、などと)ライブストリームされる映像を確認しておきましょう。ライブストリームが正常に行われている確認のほか、Egressのアクセスログ生成につながります。

ta11

MediaPackage v2のアクセスログを確認してみた

MediaPackage v2でChannel groupにアクセスログを設定し、Channelに対してMediaLiveと連携、ライブストリームを開始しました。実際に生成されているアクセスログを確認していきましょう。

先ほどのMediaPacakge v2 Channel groupのマネジメントコンソール、Loggingの項目のDestinationの列のリンクから遷移するCloudWatch Logsマネジメントコンソールを確認します。

ta16

Ingressのアクセスログを確認

まずはIngressのアクセスログを確認します。Log streamsの項目、MediaPackage_Ingress_accessLogsの文字列をクリックします。

ta18

ずらりとログが並んでいますね。なお、ログの出力については5分間隔で実施されているようでした。(User Guideには"Access logs can take a few minutes to appear in your destination. If you don't see the logs, wait a few minutes and try again."と記載があります。)今回の例では、11:40ごろ、11:45ごろ、11:50ごろ、といった時間に確認すると、それまでの5分間のログが出力されていた、という具合でした。

ta19

実際のIngressアクセスログをいくつか以下に記載します。user_agentAWSElementalMediaLiveとなっています、またclient_ipは先ほどMediaLive ChannelのマネジメントコンソールでPrevewを確認した際にちらっと映り込んでいたMediaLiveのEgress endpoints Source IPと一致することが確認できます。そして、PUTのほかDELETEリクエストのログもありました。MediaLive側で古いセグメントファイルを削除するリクエストを行っていることが実際に確認できますね。

{
    "resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
    "event_timestamp": 1732761900316,
    "client_ip": "13.XXX.XXX.80",
    "time_to_first_byte": 0.031,
    "status_code": 200,
    "received_bytes": 2209,
    "sent_bytes": 416,
    "method": "PUT",
    "request": "https://xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/in/v1/mediapackage-v2-access-logging-channel-group/1/mediapackage-v2-access-logging-channel/index_720p30.m3u8",
    "protocol": "HTTP/1.1",
    "user_agent": "AWSElementalMediaLive",
    "domain_name": "xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
    "request_id": "Root=1-67xxxx2c-52xxxxxxxxxxxxxxxxxxxxd0",
    "account": "123456789012",
    "channel_id": "mediapackage-v2-access-logging-channel",
    "channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
    "channel_group_id": "mediapackage-v2-access-logging-channel-group",
    "input_type": "",
    "input_index": 1
}
{
    "resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
    "event_timestamp": 1732761900317,
    "client_ip": "13.XXX.XXX.80",
    "time_to_first_byte": -3,
    "status_code": 204,
    "received_bytes": 256,
    "sent_bytes": 108,
    "method": "DELETE",
    "request": "https://xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/in/v1/mediapackage-v2-access-logging-channel-group/1/mediapackage-v2-access-logging-channel/index_720p30_00309.ts",
    "protocol": "HTTP/1.1",
    "user_agent": "AWSElementalMediaLive",
    "domain_name": "xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
    "request_id": "Root=1-67xxxx2c-7cxxxxxxxxxxxxxxxxxxxxca",
    "account": "123456789012",
    "channel_id": "mediapackage-v2-access-logging-channel",
    "channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
    "channel_group_id": "mediapackage-v2-access-logging-channel-group",
    "input_type": "",
    "input_index": 1
}
{
    "resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
    "event_timestamp": 1732761900337,
    "client_ip": "13.XXX.XXX.80",
    "time_to_first_byte": 0.114,
    "status_code": 200,
    "received_bytes": 647596,
    "sent_bytes": 416,
    "method": "PUT",
    "request": "https://xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/in/v1/mediapackage-v2-access-logging-channel-group/1/mediapackage-v2-access-logging-channel/index_1080p30_00330.ts",
    "protocol": "HTTP/1.1",
    "user_agent": "AWSElementalMediaLive",
    "domain_name": "xxxxxx-1.ingest.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
    "request_id": "Root=1-67xxxx2c-6exxxxxxxxxxxxxxxxxxxx04",
    "account": "123456789012",
    "channel_id": "mediapackage-v2-access-logging-channel",
    "channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
    "channel_group_id": "mediapackage-v2-access-logging-channel-group",
    "input_type": "",
    "input_index": 1
}

Egressのアクセスログを確認

続いてEgressのアクセスログについても確認してみましょう。Log streamsの項目、MediaPackage_Egress_accessLogsの文字列をクリックします。Ingress同様、ログの出力間隔は5分ごとのようでした。ログが出力されていない、更新されていない、といった場合は数分待ってみましょう。

ta20

Egressについてもずらりとログが並びます。(とはいえ、今回は1クライアントからのみしかアクセス、ライブストリームの視聴は行っていないので、Ingressよりログの量は少ないですね。)

ta21

Egressの実際のアクセスログは以下のようなものでした。client_ipは実際にライブストリームを視聴している環境のIPアドレスとなっています。(今回はCDNを使用していませんが、CDNを使用している場合はここがCDNのIPアドレスになる認識です。)

{
    "resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
    "event_timestamp": 1732762143642,
    "client_ip": "XXX.XXX.XXX.XXX",
    "time_to_first_byte": 0.021,
    "status_code": 200,
    "received_bytes": 125,
    "sent_bytes": 976,
    "method": "GET",
    "request_uri_base": "https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/out/v1/mediapackage-v2-access-logging-channel-group/mediapackage-v2-access-logging-channel/mediapackage-v2-access-logging-origin-endpoint/variant_1.m3u8",
    "request_query_params": "",
    "protocol": "HTTP/2.0",
    "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
    "domain_name": "xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
    "request_id": "Root=1-67xxxx1f-56xxxxxxxxxxxxxxxxxxxx65",
    "account": "123456789012",
    "channel_id": "mediapackage-v2-access-logging-channel",
    "channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
    "endpoint_id": "mediapackage-v2-access-logging-origin-endpoint",
    "endpoint_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel/originEndpoint/mediapackage-v2-access-logging-origin-endpoint",
    "channel_group_id": "mediapackage-v2-access-logging-channel-group",
    "manifest_name": "",
    "manifest_type": ""
}
{
    "resource_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group",
    "event_timestamp": 1732762143968,
    "client_ip": "XXX.XXX.XXX.XXX",
    "time_to_first_byte": 0.123,
    "status_code": 200,
    "received_bytes": 126,
    "sent_bytes": 4035035,
    "method": "GET",
    "request_uri_base": "https://xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com:443/out/v1/mediapackage-v2-access-logging-channel-group/mediapackage-v2-access-logging-channel/mediapackage-v2-access-logging-origin-endpoint/segment_1_94.ts",
    "request_query_params": "",
    "protocol": "HTTP/2.0",
    "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
    "domain_name": "xxxxxx.egress.xxxxxx.mediapackagev2.ap-northeast-1.amazonaws.com",
    "request_id": "Root=1-67xxxx1f-60xxxxxxxxxxxxxxxxxxxx89",
    "account": "123456789012",
    "channel_id": "mediapackage-v2-access-logging-channel",
    "channel_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel",
    "endpoint_id": "mediapackage-v2-access-logging-origin-endpoint",
    "endpoint_arn": "arn:aws:mediapackagev2:ap-northeast-1:123456789012:channelGroup/mediapackage-v2-access-logging-channel-group/channel/mediapackage-v2-access-logging-channel/originEndpoint/mediapackage-v2-access-logging-origin-endpoint",
    "channel_group_id": "mediapackage-v2-access-logging-channel-group",
    "manifest_name": "",
    "manifest_type": ""
}

まとめ

AWS Elemental MediaPackage v2でアクセスログをサポートしたアップデートについてお届けしました。本番環境など実運用でMediaPackage v2を使用する際に待ち望んでいたアップデートです。これを機に、MediaPackage v1からMediaPackage v2の移行を検討してみてはいかがでしょうか。

またMediaPackage v1と比べて、ログ送信先としてS3やFirehoseも選択できるようになったり、出力フィールドやフォーマットなども選択できるようになったりと、機能強化されている点も嬉しいですよね!このS3やFirehose連携などについても、別途確認できればと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.